import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

/**
 * @ClassName DouDiZhu
 * @Description 模拟斗地主升级之排序
 * 具体规则：
 * 1.组装54张扑克牌
 * 2.将54张牌顺序打乱
 * 3.给三位玩家轮流发牌，每人17张，最后三张作为底牌
 * 4.将大家的牌按大小顺序排好
 * 5.看牌
 * @Author Li
 * @Date 2022/8/6 11:51
 * @ModifyDate 2022/8/6 11:51
 * @Version 1.0
 */
public class DouDiZhu {
    public static void main(String[] args) {
        // 1.准备牌
        HashMap<Integer, String> poker = new HashMap<>(); // 用于存储牌的序号和牌
        List<Integer> pokerIndex = new ArrayList<>(); // 用于存储牌的序号
        List<String> colors = getColors(); // 获取花色
        List<String> numbers = getNumbers(); // 获取牌号
        int index = 0;
        // 添加大王
        poker.put(index, "大王");
        pokerIndex.add(index);
        index++;
        // 添加小王
        poker.put(index, "小王");
        pokerIndex.add(index);
        index++;
        // 按牌从大到小添加进poker
        for (String number : numbers) {
            for (String color : colors) {
                poker.put(index, color + number);
                pokerIndex.add(index);
                index++;
            }
        }
        // System.out.println(poker);
        // 2.洗牌
        Collections.shuffle(pokerIndex);
        // System.out.println(pokerIndex);
        // 3.发牌
        List<Integer> player01 = new ArrayList<>();
        List<Integer> player02 = new ArrayList<>();
        List<Integer> player03 = new ArrayList<>();
        List<Integer> diPai = new ArrayList<>();
        for (int i = 0; i < pokerIndex.size(); i++) {
            Integer pokerNum = pokerIndex.get(i);
            if (i >= 51) {
                diPai.add(pokerNum);
            } else if (i % 3 == 0) {
                player01.add(pokerNum);
            } else if (i % 3 == 1) {
                player02.add(pokerNum);
            } else if (i % 3 == 2) {
                player03.add(pokerNum);
            }
        }
        // 4.排序
        Collections.sort(player01);
        Collections.sort(player02);
        Collections.sort(player03);
        Collections.sort(diPai);
        // 5.看牌
        lookPoker("周润发", player01, poker);
        lookPoker("刘德华", player02, poker);
        lookPoker("周星驰", player03, poker);
        lookPoker("底  牌", diPai, poker);
    }

    // 看牌的实现方法
    private static void lookPoker(String name, List<Integer> list, HashMap<Integer, String> poker) {
        System.out.print(name + ":");
        for (Integer key : list) {
            String value = poker.get(key);
            System.out.print(value + " ");
        }
        System.out.println(""); // 打印完每个玩家的牌，转到下一行
    }

    // 获取存储牌号的List
    private static List<String> getNumbers() {
        List<String> list = new ArrayList<>();
        list.add("2");
        list.add("A");
        list.add("K");
        list.add("Q");
        list.add("J");
        list.add("10");
        list.add("9");
        list.add("8");
        list.add("7");
        list.add("6");
        list.add("5");
        list.add("4");
        list.add("3");
        return list;
    }

    // 获取存储花色的List
    private static List<String> getColors() {
        List<String> list = new ArrayList<>();
        list.add("♠");
        list.add("♥");
        list.add("♣");
        list.add("♦");
        return list;
    }
}
